%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018-2019  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function [NODES, ELEMENTS, MPC, MATERIALS, PSETS, COORD, BDF_File_Path, N_BDF_Strings] = Read_BDF(Work_Directory, Input_BDF_name)

% Read_BDF - функция чтения объектов из bdf файла

% --- Поддерживаемые для чтения из BDF карточки ---
% 
% узлы                      GRID (без полей PS, SEID)
% 
% системы координат         CORD2R
%                           CORD2C
% 
% MPC                       RBAR
%                           RBE2
%                           RBE3 (без идентификатора "UM")
% 
% материалы                 MAT1
%                           MAT2
%                           MAT8
%                           MAT9
% 
% property sets             PBAR
%                           PBARL
%                           PBCOMP
%                           PBEAM
%                           PBEAML
%                           PBMSECT (без чтения карточек SET1, SET3, POINT, формирующих сечение)
%                           PBRSECT (без чтения карточек SET1, SET3, POINT, формирующих сечение)
%                           PBUSH
%                           PCOMP
%                           PCOMPG
%                           PROD
%                           PSHELL
%                           PSOLID
% 
% элементы                  CBAR
%                           CBEAM
%                           CBUSH
%                           CHEXA
%                           CPENTA
%                           CQUAD4
%                           CQUAD8
%                           CROD
%                           CTETRA
%                           CTRIA3
%                           CTRIA6
% 
% 
% --- Неподдерживаемые карточки и команды ---
% 
% все карточки формата free field, а также:
% 
% узлы                      GRDSET
%                           GRIDA
%                           GRIDB
%                           GRIDF
%                           GRIDS
%                           SESET
% 
% системы координат         CORD1C
%                           CORD1R
%                           CORD1RX
%                           CORD1S
%                           CORD2RX
%                           CORD2S
%                           CORD3G
%                           CORD3R
%                           CORD3RX
%                           GMCORD
% 
% MPC и др.                 MPC
%                           MPCADD
%                           MPCAX
%                           MPCD
%                           MPCREEP
%                           MPCY
%                           RBAR1
%                           RBE1
%                           RBE2A
%                           RBE2D
%                           RBE2F
%                           RBE2GS
%                           RBE3D
%                           RBE3U
%                           RJOINT
%                           RROD
%                           RSPLINE
%                           RSSCON
%                           RTRPLT
%                           RTRPLT1
% 
% материалы                 MAT3
%                           MAT4
%                           MAT5
%                           MAT10
%                           MAT10F
% 
% property sets             PBDISCR
%                           PBEAM3
%                           PBEAMD
%                           PBMARB6
%                           PBMNUM6
%                           PBSPOT
%                           PBEAM71
%                           PBUSHT
%                           PCOMPA
%                           PCOMPF
%                           PCOMPFQ
%                           PCOMPLS
%                           PLCOMP
%                           PLPLANE
%                           PLSOLID
%                           PSHEAR
%                           PSHEARN
%                           PSHELL1
%                           PSHELLD
%                           PSHLN1
%                           PSHLN2
%                           PSOLIDD
%                           PSSHL
%                           PTSHELL
% 
% элементы  и др.           BAROR
%                           BEAMOR
%                           CBEAM3
%                           CONROD
%                           CSHEAR
%                           CSSHL
%                           CSSHLH
%                           CSSHLM
%                           CSSHLP
%                           CTRIAR
%                           CTRIAX
%                           CTRIAX6
%                           CTTRIA
%                           CTQUAD
%                           CQUAD
%                           CQUADR
%                           CQUADX
%                           SNORM
% 
% сеты                      SET2
%
% Команды:
%
% Nastran System Cell Section
%                           NASTRAN CORDM
%                           NASTRAN SYSTEM(204)
%
% File Management Section
%                           DEFINE с параметром LOCATION=SYSTEM(204)
%
% ------ Остальные карточки пропускаются ------
%
% ---------------------------------------------


% ------- ФОРМАТ ВЫХОДНЫХ МАССИВОВ: -------

% NODES (карточка GRID) | .ID | .Ref_Location(3,1) | .Location(3,1) | .Reference_CID | .Analysis_CID |

% COORD (карточки CORD2R, CORD2C) | .card | .ID | .Reference_Coord_ID | .A | .B | .C |

% MPC (карточка RBAR) | .card | .ID | .Nastran_ID | .GA | .GB | .CNA | .CNB | .CMA | .CMB | .ALPHA |
% MPC (карточка RBE2) | .card | .ID | .Nastran_ID | .GN | .CM | .GM(:,1) | .ALPHA |
% MPC (карточка RBE3) | .card | .ID | .Nastran_ID | .REFGRID | .REFC | .INDEP_DATA{:,1} | .ALPHA |
%      .INDEP_DATA{i} | .WT | .C | .G(:,1) |

% MATERIALS (карточка MAT1) | .card | .ID | .Patran_name | .E | .G | .NU | .RHO | .A | .TREF | .GE | .ST | .SC | .SS | .MCSID |
% MATERIALS (карточка MAT2) | .card | .ID | .Patran_name | .G11 | .G12 | .G13 |
%                                                               | .G22 | .G23 |
%                                                                      | .G33 |
%                                                                      | .RHO | .A1 | .A2 | .A3 | .TREF | .GE | .ST | .SC | .SS | .MCSID | .GE11 | .GE12 | .GE13 | .GE22 | .GE23 | .GE33 |
% MATERIALS (карточка MAT8) | .card | .ID | .Patran_name | .E1 | .E2 | .NU12 | .G12 | .G1Z | .G2Z | .RHO | .A1 | .A2 | .TREF | .Xt | .Xc | .Yt | .Yc | .S | .GE | .F12 | .STRN |
% MATERIALS (карточка MAT9) | .card | .ID | .Patran_name | .G11 | .G12 | .G13 | .G14 | .G15 | .G16 |
%                                                               | .G22 | .G23 | .G24 | .G25 | .G26 |
%                                                                      | .G33 | .G34 | .G35 | .G36 |
%                                                                             | .G44 | .G45 | .G46 |
%                                                                                    | .G55 | .G56 |
%                                                                                           | .G66 |
%                                                                                           | .RHO | .A1 | .A2 | .A3 | .A4 | .A5 | .A6 | .TREF | .GE | .GE11 | .GE12 | .GE13 | .GE14 | .GE15 | .GE16 | .GE22 | .GE23 | .GE24 | .GE25 | .GE26 | .GE33 | .GE34 | .GE35 | .GE36 | .GE44 | .GE45 | .GE46 | .GE55 | .GE56 | .GE66 |
%                                                                                           Расшифровка номеров сдвиговых компонент: 4 - 12, 5 - 23, 6 - 31
%
%    nu12*E2 = nu21*E1
%    nu23*E3 = nu32*E2
%    nu13*E3 = nu31*E1

% ELEMENTS (карточки CTETRA, CPENTA, CHEXA) | .card | .ID | .Prop_ID | .N_nodes | .Nodes(N_nodes,1) |
% ELEMENTS (карточка CQUAD4) | .card | .ID | .Prop_ID | .G(4,1) | .THETA_MCID | .ZOFFS | .TFLAG | .T1 | .T2 | .T3 | .T4 | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CQUAD8) | .card | .ID | .Prop_ID | .G(8,1) | .T1 | .T2 | .T3 | .T4 | .THETA_MCID | .ZOFFS | .TFLAG | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CTRIA3) | .card | .ID | .Prop_ID | .G(3,1) | .THETA_MCID | .ZOFFS | .TFLAG | .T1 | .T2 | .T3 | .Ori_type (CID | Angle) |
% ELEMENTS (карточка CTRIA6) | .card | .ID | .Prop_ID | .G(6,1) | .THETA_MCID | .ZOFFS | .T1 | .T2 | .T3 | .TFLAG | .Ori_type (CID | Angle) |
% ELEMENTS (карточка  CBUSH) | .card | .ID | .Prop_ID | .GA | .GB | .GO | .X1 | .X2 | .X3 | .CID | .S | .OCID | .S1 | .S2 | .S3 |
% ELEMENTS (карточка   CROD) | .card | .ID | .Prop_ID | .G1 | .G2 |
% ELEMENTS (карточка   CBAR) | .card | .ID | .Prop_ID | .GA | .GB | .G0 | .X1 | .X2 | .X3 | .OFFT | .PA | .PB | .W1A | .W2A | .W3A | .W1B | .W2B | .W3B |
% ELEMENTS (карточка  CBEAM) | .card | .ID | .Prop_ID | .GA | .GB | .G0 | .X1 | .X2 | .X3 | .OFFT | .BIT | .PA | .PB | .W1A | .W2A | .W3A | .W1B | .W2B | .W3B | .SA | .SB |

% PSETS (карточка  PSOLID) | .card | .ID | .Patran_name | .Mat_ID | .CORDM | .IN | .STRESS | .ISOP | .FCTN | .COROT |
% PSETS (карточка   PCOMP) | .card | .ID | .Patran_name | .Patran_laminate_name | .Z0 | .NSM | .SB | .FT | .TREF | .GE | .LAM | .N_plies | .Laminate(N_plies,4) |
%           .Laminate(i,4) | MIDi | Ti | THETAi | SOUTi (1 = YES, 0 = NO) |
% PSETS (карточка  PCOMPG) | .card | .ID | .Patran_name | .Patran_laminate_name | .Z0 | .NSM | .SB | .FT | .TREF | .GE | .LAM | .N_plies | .Laminate(N_plies,5) | .GEFLG |
%           .Laminate(i,5) | GPLYIDi | MIDi | Ti | THETAi | SOUTi (1 = YES, 0 = NO) |
% PSETS (карточка  PSHELL) | .card | .ID | .Patran_name | .MID1 | .T | .MID2 | .I_ratio | .MID3 | .TS_T | .NSM | .Z1 | .Z2 | .MID4 |
% PSETS (карточка   PBUSH) | .card | .ID | .Patran_name | .K(6,1) | .B(6,1) | .GE(6,1) | .RCV(.SA .ST .EA .ET) | .M |
% PSETS (карточка    PROD) | .card | .ID | .Patran_name | .MID | .A | .J | .C | .NSM |
% PSETS (карточка PBMSECT) | .card | .ID | .Patran_name | .MID | .FORM | .Section_data |
% PSETS (карточка PBRSECT) | .card | .ID | .Patran_name | .MID | .FORM | .NSM | .Section_data |
% PSETS (карточка    PBAR) | .card | .ID | .Patran_name | .MID | .A | .I1 | .I2 | .J | .NSM | .C1 | .C2 | .D1 | .D2 | .E1 | .E2 | .F1 | .F2 | .K1 | .K2 | .I12 |
% PSETS (карточка   PBARL) | .card | .ID | .Patran_name | .MID | .GROUP | .TYPE | .DIM(:,1)| .NSM |
%                   .TYPE = (ROD, TUBE, TUBE2, L, I, CHAN, T, BOX, BAR, CROSS, H, T1, I1, CHAN1, Z, CHAN2, T2, BOX1, HEXA, HAT, HAT1, DBOX )
% PSETS (карточка   PBEAM) | .card | .ID | .Patran_name | .MID | .A | .I1 | .I2 | .I12 | .J | .NSM | .C1 | .C2 | .D1 | .D2 | .E1 | .E2 | .F1 | .F2 |
%                          | .N_intermediate_states | .Intermediate_states_data{N_intermediate_states,1} |
%                          | .K1 | .K2 | .S1 | .S2 | .NSI_A | .NSI_B | .CW_A | .CW_B | .M1_A | .M2_A | .M1_B | .M2_B | .N1_A | .N2_A | .N1_B | .N2_B |
%             .Intermediate_states_data{i} : { .SO | .X_XB | .A | .I1 | .I2 | .I12 | .J | .NSM | .C1 | .C2 | .D1 | .D2 | .E1 | .E2 | .F1 | .F2 }
% PSETS (карточка  PBEAML) | .card | .ID | .Patran_name | .MID | .GROUP | .TYPE | .DIM(:,1)| .NSM | .N_intermediate_states | .Intermediate_states_data{N_intermediate_states,1} |
%             .Intermediate_states_data{i} : { .SO | .X_XB | .DIM(:,1)| .NSM }
%                   .TYPE = (ROD, TUBE, TUBE2, L, I, CHAN, T, BOX, BAR, CROSS, H, T1, I1, CHAN1, Z, CHAN2, T2, BOX1, HEXA, HAT, HAT1, DBOX )
% PSETS (карточка  PBCOMP) | .card | .ID | .Patran_name | .MID | .A | .I1 | .I2 | .I12 | .J | .NSM | .K1 | .K2 | .M1 | .M2 | .N1 | .N2 | .SYMOPT | .N_lumped_areas | .Lumped_area_data{N_lumped_areas,1} |
%             .Lumped_area_data{i} : { .Y | .Z | .C | .MID }


global ErrCode;
global Progress_Bar_Segments;
global Progress_Bar_Delay;

global BDF_Entity_Read_Settings;

% Включение/отключение чтения
%     Правила:
% Если считываются узлы, то должны также считываться системы координат
% Если считываются элементы и проперти сеты, то должны также считываться узлы
Reading_NODES =          'ON'; % ON | OFF
Reading_COORD =          'ON'; % ON | OFF
Reading_MPC =            'ON'; % ON | OFF
Reading_MATERIALS =      'ON'; % ON | OFF
Reading_PSETS_ELEMENTS = 'ON'; % ON | OFF

% Фильтры обязательного содержания объектов в bdf файле
% Если 'TRUE' и объектов не найдено, то работа программы завершается с ошибкой
Need_NODES =     'TRUE'; % TRUE | FALSE
Need_COORD =     'FALSE'; % TRUE | FALSE
Need_MPC =       'FALSE'; % TRUE | FALSE
Need_MATERIALS = 'TRUE'; % TRUE | FALSE
Need_ELEMENTS =  'TRUE'; % TRUE | FALSE
Need_PSETS =     'TRUE'; % TRUE | FALSE

% Инициализация переменных
NODES = [];
ELEMENTS = [];
MPC = [];
MATERIALS = [];
PSETS = [];
COORD = [];
N_BDF_Strings = [];
BDF_File_Path = [];

% Проверка параметров чтения
if (strcmp(Reading_NODES, 'ON') && strcmp(Reading_COORD, 'OFF'))
    fprintf (1, '\nОшибка: обнаружена неправильная установка параметров чтения в функции Read_BDF !\n');
    fprintf (1, 'При чтении узлов должно быть также включено чтение систем координат.\n');
    ErrCode = -1;
    return;
end

if (strcmp(Reading_PSETS_ELEMENTS, 'ON') && strcmp(Reading_NODES, 'OFF'))
    fprintf (1, '\nОшибка: обнаружена неправильная установка параметров чтения в функции Read_BDF !\n');
    fprintf (1, 'При чтении элементов должно быть также включено чтение узлов.\n');
    ErrCode = -1;
    return;
end

% Сохранение параметров чтения для использования вне данной функции
BDF_Entity_Read_Settings.Read_NODES = Reading_NODES;
BDF_Entity_Read_Settings.Read_COORD = Reading_COORD;
BDF_Entity_Read_Settings.Read_MPC = Reading_MPC;
BDF_Entity_Read_Settings.Read_MATERIALS = Reading_MATERIALS;
BDF_Entity_Read_Settings.Read_PSETS_ELEMENTS = Reading_PSETS_ELEMENTS;

% Анализ bdf файла на INCLUDE
fprintf (1, 'Анализ bdf файла на INCLUDE...          ');

Include_Flag = Check_BDF_Include(Work_Directory, Input_BDF_name);

if (ErrCode < 0)
    return;
end

fprintf (1, 'OK!\n');

% Сборка полного bdf файла
if (Include_Flag == 1)
    
    fprintf (1, 'Сборка полного bdf файла...             ');
    
    BDF_File_Path = Assemble_BDF(Work_Directory, Input_BDF_name);
    
    if (ErrCode < 0)
        return;
    end
    
    fprintf (1, 'OK!\n');
    
else
    
    BDF_File_Path = [Work_Directory '\' Input_BDF_name '.bdf'];
    
end

fprintf (1, 'Чтение bdf файла...\n');

% Открытие файла
Fin = fopen(BDF_File_Path, 'r');

if (Fin < 0)
    fprintf (1, 'Не удалось открыть файл [%s] !\n', BDF_File_Path);
    ErrCode = -1;
    return;
end

fprintf (1, '    Оценка...                           ');


% Для вывода прогресса
Time_segments = Progress_Bar_Segments;
File_stats = dir(BDF_File_Path);
N_bytes = File_stats.bytes;
N_bytes_segment = floor(N_bytes/Time_segments);
Segment_counter = 0;
Written_counter = 0;


% Инициализация счетчика строк
N_BDF_Strings = 0;

% Флаг начала Bulk Data Section
Bulk_Data_Section_flag = 0;

% Переменные для узлов
Node_find_flag = 0;
Node_start_position = [];
N_Nodes = 0;

% Переменные для систем координат
Coord_find_flag = 0;
Coord_start_position = [];
N_Coord = 0;

% Переменные для MPC
MPC_find_flag = 0;
MPC_start_position = [];
N_MPC = 0;
MPC_ID_Conflict_find_flag = 0;
MPC_ID_Conflict_counter = 0;
Non_MPC_ID_Conflict_find_flag = 0;
MPC_ID_Conflict_start_position = [];

% Переменные для материалов
Material_find_flag = 0;
Material_start_position = [];
N_Materials = 0;
Mat_Rec_find_flag = 0;
Mat_Rec_start_position = [];

% Переменные для элементов
Element_find_flag = 0;
Element_start_position = [];
N_Elements = 0;

% Переменные для property sets
PSET_find_flag = 0;
PSET_start_position = [];
N_PSETS = 0;
Region_Rec_find_flag = 0;
Region_Rec_start_position = [];

% Инициализация флага проверки на пустой файл
Check_Empty_File = 1;

while (~feof(Fin))
    
    % Считывание строки
    string = fgets(Fin);
    
    % Случай пустого файла
    if (Check_Empty_File == 1)
        if (isnumeric(string))
            fprintf (1, '\nФайл %s пустой!\n', BDF_File_Path);
            ErrCode = -1;
            fclose (Fin);
            return;
        else
            Check_Empty_File = 0;
        end
    end
    
    % Счетчик строк
    N_BDF_Strings = N_BDF_Strings + 1;
    
    
    % Для вывода прогресса
    str_len = length(string);
    Segment_counter = Segment_counter + str_len;
    if (Segment_counter >= N_bytes_segment)
        Segment_counter = Segment_counter - N_bytes_segment;
        Written_counter = Written_counter + 1;
        if (Written_counter < Time_segments)
            fprintf (1, '#');
            pause (Progress_Bar_Delay);
        end
    end
    
    
    % Длина не обрезанной строки
    Str_Length = length(string);
    
    % Обрезка белых символов в начале и в конце строки до начала Bulk Data Section
    if (Bulk_Data_Section_flag == 0)
        string = strtrim(string);
        if (isempty(string))
            continue;
        end
    end
    
    % Ветвление по первому символу строки
    switch string(1)
        
        case {'B', 'b'}
            
            % BEGIN [BULK]
            if (Bulk_Data_Section_flag == 0)
                if ((length(string) >= 5) && strcmpi(string(2:5), 'EGIN'))
                    temp_cell_array = strsplit(string, {' ', '\t'});
                    switch upper(temp_cell_array{1})
                        case 'BEGIN'
                            Bulk_Data_Section_flag = 1;
                            continue;
                        otherwise
                            fprintf (1, '\nОшибка: неизвестная команда в bdf файле [%s] !\n', Trim_CR_LF(string));
                            fprintf (1, 'Внесите исправления в bdf файл или обратитесь к разработчику для решения этого вопроса.\n');
                            ErrCode = -1;
                            fclose (Fin);
                            return;
                    end
                end
            end
            
            % BAROR (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AROR'))
                fprintf (1, '\nКарточка BAROR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % BEAMOR (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'EAMOR'))
                fprintf (1, '\nКарточка BEAMOR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end

        case {'C', 'c'}
            
            % CTETRA (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TETRA'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CQUAD4 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUAD4'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CBAR + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR '))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CBAR*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR*'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CHEXA (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'HEXA'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 6) && (string(6) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CTRIA3 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TRIA3'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end

            % CBUSH + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH '))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CBUSH*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH*'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CROD (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'ROD'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 5) && (string(5) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CBEAM + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM '))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CBEAM*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM*'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CORD2R*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD2R*'))
                
                N_Coord = N_Coord + 1;
                
                if (Coord_find_flag == 0)
                    Coord_find_flag = 1;
                    Coord_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CORD2R + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD2R '))
                
                N_Coord = N_Coord + 1;
                
                if (Coord_find_flag == 0)
                    Coord_find_flag = 1;
                    Coord_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % CPENTA (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'PENTA'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CORD2C (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ORD2C'))
                
                N_Coord = N_Coord + 1;
                
                if (Coord_find_flag == 0)
                    Coord_find_flag = 1;
                    Coord_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CQUAD8 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUAD8'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CTRIA6 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TRIA6'))
                
                N_Elements = N_Elements + 1;
                
                if (Element_find_flag == 0)
                    Element_find_flag = 1;
                    Element_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % CBAR,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR,'))
                
                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % CBUSH,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH,'))
                
                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % CBEAM,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM,'))
                
                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % CORD2R,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD2R,'))
                
                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % CORD1R + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD1R '))
                fprintf (1, '\nКарточка CORD1R не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD1R*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD1R*'))
                fprintf (1, '\nКарточка CORD1R* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD1R,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD1R,'))
                fprintf (1, '\nКарточка CORD1R, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end   
            
            % CORD1C (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ORD1C'))
                fprintf (1, '\nКарточка CORD1C не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD1RX (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD1RX'))
                fprintf (1, '\nКарточка CORD1RX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD1S (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ORD1S'))
                fprintf (1, '\nКарточка CORD1S не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD2RX (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD2RX'))
                fprintf (1, '\nКарточка CORD2RX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD2S (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ORD2S'))
                fprintf (1, '\nКарточка CORD2S не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD3G (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ORD3G'))
                fprintf (1, '\nКарточка CORD3G не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD3R + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD3R '))
                fprintf (1, '\nКарточка CORD3R не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD3R*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD3R*'))
                fprintf (1, '\nКарточка CORD3R* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD3R,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD3R,'))
                fprintf (1, '\nКарточка CORD3R, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CORD3RX (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'ORD3RX'))
                fprintf (1, '\nКарточка CORD3RX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHL + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHL '))
                fprintf (1, '\nКарточка CSSHL не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHL*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHL*'))
                fprintf (1, '\nКарточка CSSHL* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHL,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHL,'))
                fprintf (1, '\nКарточка CSSHL, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHLH (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHLH'))
                fprintf (1, '\nКарточка CSSHLH не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHLM (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHLM'))
                fprintf (1, '\nКарточка CSSHLM не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSSHLP (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSHLP'))
                fprintf (1, '\nКарточка CSSHLP не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CQUAD + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUAD '))
                fprintf (1, '\nКарточка CQUAD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CQUAD*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUAD*'))
                fprintf (1, '\nКарточка CQUAD* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CQUAD,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUAD,'))
                fprintf (1, '\nКарточка CQUAD, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CQUADR (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUADR'))
                fprintf (1, '\nКарточка CQUADR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CQUADX (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'QUADX'))
                fprintf (1, '\nКарточка CQUADX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CSHEAR (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SHEAR'))
                fprintf (1, '\nКарточка CSHEAR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTQUAD (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TQUAD'))
                fprintf (1, '\nКарточка CTQUAD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTRIAR (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TRIAR'))
                fprintf (1, '\nКарточка CTRIAR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTRIAX + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRIAX '))
                fprintf (1, '\nКарточка CTRIAX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTRIAX*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRIAX*'))
                fprintf (1, '\nКарточка CTRIAX* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTRIAX,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRIAX,'))
                fprintf (1, '\nКарточка CTRIAX, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTRIAX6 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRIAX6'))
                fprintf (1, '\nКарточка CTRIAX6 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CTTRIA (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'TTRIA'))
                fprintf (1, '\nКарточка CTTRIA не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CBEAM3 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM3'))
                fprintf (1, '\nКарточка CBEAM3 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % CONROD (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'ONROD'))
                fprintf (1, '\nКарточка CONROD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case {'D', 'd'}
            
            % Обработка команды DEFINE с параметром LOCATION=SYSTEM(204)
            % DEFI
            if ((length(string) >= 4) && strcmpi(string(2:4), 'EFI'))
                temp_cell_array = strsplit(string, {' ', '=', '\t'});
                switch upper(temp_cell_array{1})
                    case {'DEFINE', 'DEFIN', 'DEFI'}
                        if (~isempty(strfind(upper(erase(string, {' ', char(9)})), 'LOCATION=SYSTEM(204)'))) %#ok<STREMP> % Для совместимости с GNU Octave вместо if (contains(upper(erase(string, {' ', char(9)})), 'LOCATION=SYSTEM(204)'))
                            fprintf (1, '\nОбнаружена строка, содержащая [%s]\n', Trim_CR_LF(string));
                            fprintf (1, 'Команда DEFINE с параметром LOCATION=SYSTEM(204) устанавливает значение по умолчанию полей CORDM для карточек PSOLID и не поддерживается в текущей версии программы!\n');
                            fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данной команды.\n');
                            ErrCode = -1;
                            fclose (Fin);
                            return;
                        end
                    otherwise
                        fprintf (1, '\nОшибка функции Read_BDF: неизвестная команда в bdf файле [%s] !\n', temp_cell_array{1});
                        fprintf (1, 'Внесите исправления в bdf файл или обратитесь к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        fclose (Fin);
                        return;
                end
            end
            
        case {'G', 'g'}
            
            % GRID + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RID '))
                
                N_Nodes = N_Nodes + 1;
                
                if (Node_find_flag == 0)
                    Node_find_flag = 1;
                    Node_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % GRID*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RID*'))
                
                N_Nodes = N_Nodes + 1;
                
                if (Node_find_flag == 0)
                    Node_find_flag = 1;
                    Node_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end

                continue;
                
            end
            
            % GRID,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RID,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % GRIDA (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RIDA'))
                fprintf (1, '\nКарточка GRIDA не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % GRIDB (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RIDB'))
                fprintf (1, '\nКарточка GRIDB не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % GRIDF (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RIDF'))
                fprintf (1, '\nКарточка GRIDF не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % GRIDS (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'RIDS'))
                fprintf (1, '\nКарточка GRIDS не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % GRDSET (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'RDSET'))
                fprintf (1, '\nКарточка GRDSET не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % GMCORD (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'MCORD'))
                fprintf (1, '\nКарточка GMCORD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case {'I', 'i'}
            
            % Обработка команды INCLUDE
            % INCL
            if ((length(string) >= 4) && strcmpi(string(2:4), 'NCL'))
                temp_cell_array = strsplit(string, {' ', '\t', ''''});
                switch upper(temp_cell_array{1})
                    case {'INCLUDE', 'INCLUD', 'INCLU', 'INCL'}
                        fprintf (1, '\nОшибка: обнаружена строка, содержащая [%s]\n', Trim_CR_LF(string));
                        fprintf (1, 'После сборки полного bdf файла в нем не должно оставаться команд INCLUDE.\n');
                        fprintf (1, 'Обратитесь к разработчику для решения этого вопроса!\n');
                        ErrCode = -1;
                        fclose (Fin);
                        return;
                    otherwise
                        fprintf (1, '\nОшибка функции Read_BDF: неизвестная команда в bdf файле [%s] !\n', temp_cell_array{1});
                        fprintf (1, 'Внесите исправления в bdf файл или обратитесь к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        fclose (Fin);
                        return;
                end
            end
            
        case {'M', 'm'}
            
            % MAT8 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT8 '))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT8*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT8*'))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT1 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT1 '))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT1*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT1*'))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT9 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT9 '))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT9*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT9*'))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT2 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT2 '))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT2*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT2*'))
                
                N_Materials = N_Materials + 1;
                
                if (Material_find_flag == 0)
                    Material_find_flag = 1;
                    Material_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % MAT1,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT1,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % MAT2,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT2,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % MAT8,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT8,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % MAT9,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'AT9,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end

            % MAT3 (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'AT3'))
                fprintf (1, '\nКарточка MAT3 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT4 (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'AT4'))
                fprintf (1, '\nКарточка MAT4 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT5 (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'AT5'))
                fprintf (1, '\nКарточка MAT5 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT10 + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'AT10 '))
                fprintf (1, '\nКарточка MAT10 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT10*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'AT10*'))
                fprintf (1, '\nКарточка MAT10* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT10,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'AT10,'))
                fprintf (1, '\nКарточка MAT10, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MAT10F (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'AT10F'))
                fprintf (1, '\nКарточка MAT10F не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPC + пробел
            if ((length(string) >= 4) && strcmpi(string(2:4), 'PC '))
                fprintf (1, '\nКарточка MPC не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                fprintf (1, 'В случае, если MPC является командой из Case Control Section, добавьте перед ней символ пробела.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPC*
            if ((length(string) >= 4) && strcmpi(string(2:4), 'PC*'))
                fprintf (1, '\nКарточка MPC* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                fprintf (1, 'В случае, если MPC является командой из Case Control Section, добавьте перед ней символ пробела.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPC,
            if ((length(string) >= 4) && strcmpi(string(2:4), 'PC,'))
                fprintf (1, '\nКарточка MPC, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                fprintf (1, 'В случае, если MPC является командой из Case Control Section, добавьте перед ней символ пробела.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPCADD (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'PCADD'))
                fprintf (1, '\nКарточка MPCADD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPCAX (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'PCAX'))
                fprintf (1, '\nКарточка MPCAX не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPCD (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'PCD'))
                fprintf (1, '\nКарточка MPCD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPCREEP (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'PCREEP'))
                fprintf (1, '\nКарточка MPCREEP не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % MPCY (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'PCY'))
                fprintf (1, '\nКарточка MPCY не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case {'N', 'n'}
            
            % Обработка команды NASTRAN с параметрами CORDM / SYSTEM(204)
            % NAST
            if ((length(string) >= 4) && strcmpi(string(2:4), 'AST'))
                temp_cell_array = strsplit(string, {' ', '=', '\t'});
                switch upper(temp_cell_array{1})
                    case {'NASTRAN', 'NASTRA', 'NASTR', 'NAST'}
                        if (~isempty(strfind(upper(string), 'CORDM'))) %#ok<STREMP> % Для совместимости с GNU Octave вместо if (contains(upper(string), 'CORDM'))
                            fprintf (1, '\nОбнаружена строка, содержащая [%s]\n', Trim_CR_LF(string));
                            fprintf (1, 'Команда NASTRAN с параметром CORDM устанавливает значение по умолчанию полей CORDM для карточек PSOLID и не поддерживается в текущей версии программы!\n');
                            fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данной команды.\n');
                            ErrCode = -1;
                            fclose (Fin);
                            return;
                        end
                        if (~isempty(strfind(upper(erase(string, {' ', char(9)})), 'SYSTEM(204)'))) %#ok<STREMP> % Для совместимости с GNU Octave вместо if (contains(upper(erase(string, {' ', char(9)})), 'SYSTEM(204)'))
                            fprintf (1, '\nОбнаружена строка, содержащая [%s]\n', Trim_CR_LF(string));
                            fprintf (1, 'Команда NASTRAN с параметром SYSTEM(204) устанавливает значение по умолчанию полей CORDM для карточек PSOLID и не поддерживается в текущей версии программы!\n');
                            fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данной команды.\n');
                            ErrCode = -1;
                            fclose (Fin);
                            return;
                        end
                    otherwise
                        fprintf (1, '\nОшибка функции Read_BDF: неизвестная команда в bdf файле [%s] !\n', temp_cell_array{1});
                        fprintf (1, 'Внесите исправления в bdf файл или обратитесь к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        fclose (Fin);
                        return;
                end
            end
            
        case {'P', 'p'}
            
            % PBUSH + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBUSH*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PSHELL + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHELL '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PSHELL*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHELL*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBAR + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBAR*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBARL (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BARL'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 6) && (string(6) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PROD + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'ROD '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PROD*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'ROD*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBEAM + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBEAM*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBEAML (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAML'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PCOMP + пробел
            if ((length(string) >= 6) && strcmpi(string(2:6), 'COMP '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PCOMP*
            if ((length(string) >= 6) && strcmpi(string(2:6), 'COMP*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PCOMPG (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'COMPG'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PSOLID + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SOLID '))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PSOLID*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SOLID*'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % PBRSECT (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BRSECT'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 8) && (string(8) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PBMSECT (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BMSECT'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 8) && (string(8) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PBCOMP (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BCOMP'))
                
                N_PSETS = N_PSETS + 1;
                
                if (PSET_find_flag == 0)
                    PSET_find_flag = 1;
                    PSET_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                if ((length(string) >= 7) && (string(7) == ','))
                    fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                    ErrCode = -1;
                    fclose (Fin);
                    return;
                end
                
                continue;
                
            end
            
            % PBAR,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PBEAM,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PBUSH,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSH,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PSHELL,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHELL,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PCOMP,
            if ((length(string) >= 6) && strcmpi(string(2:6), 'COMP,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PSOLID,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SOLID,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PROD,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'ROD,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % PSOLIDD (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SOLIDD'))
                fprintf (1, '\nКарточка PSOLIDD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PLSOLID (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'LSOLID'))
                fprintf (1, '\nКарточка PLSOLID не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPLS (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'COMPLS'))
                fprintf (1, '\nКарточка PCOMPLS не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPA (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'COMPA'))
                fprintf (1, '\nКарточка PCOMPA не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPF + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'COMPF '))
                fprintf (1, '\nКарточка PCOMPF не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPF*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'COMPF*'))
                fprintf (1, '\nКарточка PCOMPF* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPF,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'COMPF,'))
                fprintf (1, '\nКарточка PCOMPF, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PCOMPFQ (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'COMPFQ'))
                fprintf (1, '\nКарточка PCOMPFQ не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PLCOMP (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'LCOMP'))
                fprintf (1, '\nКарточка PLCOMP не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PLPLANE (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'LPLANE'))
                fprintf (1, '\nКарточка PLPLANE не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHELL1 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHELL1'))
                fprintf (1, '\nКарточка PSHELL1 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHELLD (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHELLD'))
                fprintf (1, '\nКарточка PSHELLD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHLN1 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SHLN1'))
                fprintf (1, '\nКарточка PSHLN1 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHLN2 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SHLN2'))
                fprintf (1, '\nКарточка PSHLN2 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHEAR + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHEAR '))
                fprintf (1, '\nКарточка PSHEAR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHEAR*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHEAR*'))
                fprintf (1, '\nКарточка PSHEAR* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHEAR,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHEAR,'))
                fprintf (1, '\nКарточка PSHEAR, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSHEARN (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SHEARN'))
                fprintf (1, '\nКарточка PSHEARN не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PTSHELL (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TSHELL'))
                fprintf (1, '\nКарточка PTSHELL не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PSSHL (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'SSHL'))
                fprintf (1, '\nКарточка PSSHL не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBDISCR (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BDISCR'))
                fprintf (1, '\nКарточка PBDISCR не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBEAM3 (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAM3'))
                fprintf (1, '\nКарточка PBEAM3 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBEAMD (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BEAMD'))
                fprintf (1, '\nКарточка PBEAMD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBMARB6 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BMARB6'))
                fprintf (1, '\nКарточка PBMARB6 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBMNUM6 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BMNUM6'))
                fprintf (1, '\nКарточка PBMNUM6 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBSPOT (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BSPOT'))
                fprintf (1, '\nКарточка PBSPOT не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBEAM71 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'BEAM71'))
                fprintf (1, '\nКарточка PBEAM71 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % PBUSHT (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BUSHT'))
                fprintf (1, '\nКарточка PBUSHT не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case {'R', 'r'}

            % RBAR + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR '))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBAR*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR*'))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBE2 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2 '))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBE2*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2*'))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBE3 + пробел
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE3 '))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBE3*
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE3*'))
                
                N_MPC = N_MPC + 1;
                
                if (MPC_find_flag == 0)
                    MPC_find_flag = 1;
                    MPC_start_position = ftell(Fin) - Str_Length;
                end
                
                if (Bulk_Data_Section_flag == 0)
                    Bulk_Data_Section_flag = 1;
                end
                
                continue;
                
            end
            
            % RBAR,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % RBE2,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % RBE3,
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE3,'))

                fprintf (1, '\nНайдена запись [%s]\nФормат Free field файла bdf не поддерживается в текущей версии программы!\n', strtrim(string));
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
                
            end
            
            % RBAR1 (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BAR1'))
                fprintf (1, '\nКарточка RBAR1 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE1 (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'BE1'))
                fprintf (1, '\nКарточка RBE1 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RJOINT (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'JOINT'))
                fprintf (1, '\nКарточка RJOINT не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RROD (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'ROD'))
                fprintf (1, '\nКарточка RROD не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RSPLINE (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'SPLINE'))
                fprintf (1, '\nКарточка RSPLINE не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RSSCON (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'SSCON'))
                fprintf (1, '\nКарточка RSSCON не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RTRPLT + пробел
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRPLT '))
                fprintf (1, '\nКарточка RTRPLT не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RTRPLT*
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRPLT*'))
                fprintf (1, '\nКарточка RTRPLT* не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RTRPLT,
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRPLT,'))
                fprintf (1, '\nКарточка RTRPLT, не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RTRPLT1 (уникальное имя)
            if ((length(string) >= 7) && strcmpi(string(2:7), 'TRPLT1'))
                fprintf (1, '\nКарточка RTRPLT1 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE2A (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2A'))
                fprintf (1, '\nКарточка RBE2A не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE2D (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2D'))
                fprintf (1, '\nКарточка RBE2D не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE2F (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE2F'))
                fprintf (1, '\nКарточка RBE2F не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE2GS (уникальное имя)
            if ((length(string) >= 6) && strcmpi(string(2:6), 'BE2GS'))
                fprintf (1, '\nКарточка RBE2GS не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE3D (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE3D'))
                fprintf (1, '\nКарточка RBE3D не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % RBE3U (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'BE3U'))
                fprintf (1, '\nКарточка RBE3U не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case {'S', 's'}
            
            % SNORM (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'NORM'))
                fprintf (1, '\nКарточка SNORM не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % SESET (уникальное имя)
            if ((length(string) >= 5) && strcmpi(string(2:5), 'ESET'))
                fprintf (1, '\nКарточка SESET не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
            % SET2 (уникальное имя)
            if ((length(string) >= 4) && strcmpi(string(2:4), 'ET2'))
                fprintf (1, '\nКарточка SET2 не поддерживается в текущей версии программы!\n');
                fprintf (1, 'Обратитесь к разработчику для решения этого вопроса или сгенерируйте файл bdf без данных карточек.\n');
                ErrCode = -1;
                fclose (Fin);
                return;
            end
            
        case '$'
            
            % $ ID conflict
            if ((length(string) >= 13) && strcmp(string(2:13), ' ID conflict'))

                MPC_ID_Conflict_flag = 0;
                
                if  ((length(string) >= 37) && strcmp(string(2:37), ' ID conflict : the PATRAN MPC ID was'))
                    
                    MPC_ID_Conflict_counter = MPC_ID_Conflict_counter + 1;
                    
                    MPC_ID_Conflict_flag = 1;
                    
                    if (MPC_ID_Conflict_find_flag == 0)
                        
                        MPC_ID_Conflict_find_flag = 1;
                        
                        MPC_ID_Conflict_start_position = ftell(Fin) - Str_Length;
                        
                    end

                end
                
                if ((MPC_ID_Conflict_flag == 0) && (Non_MPC_ID_Conflict_find_flag == 0))
                    
                    Non_MPC_ID_Conflict_find_flag = 1;
                    
                    ID_Conflict_string = string;
                    
                end
                
                continue;
                
            end
            
            % $ Elements and Element Properties for region :
            if ((length(string) >= 46) && strcmp(string(2:46), ' Elements and Element Properties for region :'))
                
                if (Region_Rec_find_flag == 0)
                    
                    Region_Rec_find_flag = 1;
                    Region_Rec_start_position = ftell(Fin) - Str_Length;
                
                end
                
                continue;
                
            end
            
            % $ Referenced Material Records
            if ((length(string) >= 29) && strcmp(string(2:29), ' Referenced Material Records'))
                
                if (Mat_Rec_find_flag == 0)
                    
                    Mat_Rec_find_flag = 1;
                    Mat_Rec_start_position = ftell(Fin) - Str_Length;
                
                end
                
                continue;
                
            end
            
            %$ Material Record :
            if ((length(string) >= 20) && strcmp(string(2:19), ' Material Record :')) % здесь нет ошибки с 20 и 19
                
                if (Mat_Rec_find_flag == 0)
                    
                    Mat_Rec_find_flag = 1;
                    Mat_Rec_start_position = ftell(Fin) - Str_Length;
                
                end
                
                continue;
                
            end
        
    end

end

% Для вывода прогресса
for i=1:Time_segments-1-Written_counter
    fprintf (1, '#');
    pause (Progress_Bar_Delay);
end
fprintf (1, '# ');
pause (Progress_Bar_Delay);


% Обработка исключений

% Исключения по узлам
if ((strcmp(Need_NODES, 'TRUE')) && (Node_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с узлами !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

% Исключения по системам координат
if ((strcmp(Need_COORD, 'TRUE')) && (Coord_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с системами координат !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

% Исключения по MPC
if ((strcmp(Need_MPC, 'TRUE')) && (MPC_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с MPC !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

if (Non_MPC_ID_Conflict_find_flag == 1)
    fprintf (1, '\nВ bdf файле найдена непредвиденная запись о конфликте ID: [%s]\n', strtrim(ID_Conflict_string));
    fprintf (1, 'Обратитесь к разработчику для решения этого вопроса.\n');
    ErrCode = -1;
    fclose (Fin);
    return;
end

if (MPC_ID_Conflict_counter > N_MPC)
    fprintf (1, '\nКоличество записей о конфликтах в номерах MPC превышает количество карточек с MPC !\n');
    ErrCode = -1;
    fclose (Fin);
    return;
end

% Исключения по материалам
if ((strcmp(Need_MATERIALS, 'TRUE')) && (Material_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с материалами !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

% Исключения по элементам
if ((strcmp(Need_ELEMENTS, 'TRUE')) && (Element_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с элементами !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

% Исключения по property sets
if ((strcmp(Need_PSETS, 'TRUE')) && (PSET_find_flag == 0))
    fprintf (1, '\nВ файле %s не найдено карточек с property sets !\n', BDF_File_Path);
    ErrCode = -1;
    fclose (Fin);
    return;
end

fprintf (1, 'OK!\n');

% Чтение карточек

% Чтение узлов
if (strcmp(Reading_NODES, 'ON'))
    if (Node_find_flag == 1)

        NODES = Read_NODES(Fin, N_Nodes, Node_start_position);

        if (ErrCode < 0)
            fclose (Fin);
            return;
        end

    end
end

% Чтение систем координат
if (strcmp(Reading_COORD, 'ON'))
    if (Coord_find_flag == 1)

        COORD = Read_COORD(Fin, N_Coord, Coord_start_position);

        if (ErrCode < 0)
            fclose (Fin);
            return;
        end

    end
end

% Чтение MPC
if (strcmp(Reading_MPC, 'ON'))
    if (MPC_find_flag == 1)

        if (isempty(MPC_ID_Conflict_start_position))
            MPC_ID_Conflict_start_position = MPC_start_position;
        end

        MPC = Read_MPC(Fin, N_MPC, MPC_start_position, MPC_ID_Conflict_counter, MPC_ID_Conflict_start_position);

        if (ErrCode < 0)
            fclose (Fin);
            return;
        end

    end
end

% Чтение материалов
if (strcmp(Reading_MATERIALS, 'ON'))
    if (Material_find_flag == 1)

        if (isempty(Mat_Rec_start_position))
            Mat_Rec_start_position = Material_start_position;
        end

        MATERIALS = Read_MATERIALS(Fin, N_Materials, Material_start_position, Mat_Rec_start_position);

        if (ErrCode < 0)
            fclose (Fin);
            return;
        end

    end
end

% Чтение property sets и элементов
if (strcmp(Reading_PSETS_ELEMENTS, 'ON'))
    if ((Element_find_flag == 1) || (PSET_find_flag == 1))

        if (isempty(Element_start_position))
            Element_start_position = PSET_start_position;
        end

        if (isempty(PSET_start_position))
            PSET_start_position = Element_start_position;
        end

        if (isempty(Region_Rec_start_position))
            Region_Rec_start_position = PSET_start_position;
        end

        [PSETS, ELEMENTS] = Read_PSETS_ELEMENTS(Fin, N_Elements, Element_start_position, N_PSETS, PSET_start_position, Region_Rec_start_position);

        if (ErrCode < 0)
            fclose (Fin);
            return;
        end

    end
end

% Закрытие файла
fclose (Fin);
